package club.banyuan;

import java.util.Iterator;

public class Pairs<K, V> implements Iterable<Pair<K, V>> {

    /* 声明一对对象的固定大小的数组（最多10个元素） */
    private Pair<K, V>[] pairs = new Pair[10];
    private int count = 0;

    /**
     * 创建一个集合，该集合将存储成对添加的项目。
     */
    public Pairs() {
    }

    /**
     * 创建一个新的对，并在有空间的情况下将其添加到集合中。
     *
     * @param first  The first object.
     * @param second The second object.
     */
    public boolean addPair(K first, V second) {
        if (count == pairs.length) {
            return false;
        }
        pairs[count++] = new Pair<>(first, second);
        return true;
    }


    @Override
    public Iterator<Pair<K, V>> iterator() {
        return new PairIterator();
    }

    /*
     * 根据以下位置的API文档在此处实现迭代器
     * https://docs.oracle.com/javase/10/docs/api/java/util/Iterator.html
     * 按照规定抛出异常
     */
    private class PairIterator implements Iterator<Pair<K, V>> {

        private int index = -1;

        @Override
        public boolean hasNext() {
            return index + 1 < count;
//            throw new UnsupportedOperationException();
        }

        /**
         * 返回迭代器中的下一个对象
         */
        @Override
        public Pair<K, V> next() {
            if (!hasNext()) {
                throw new IndexOutOfBoundsException("没有下一个元素");
            }

            return pairs[++index];
//            throw new UnsupportedOperationException();
        }

        /**
         * 从集合中移除next（）返回的上一个对象。
         */
        @Override
        public void remove() {
            if (count - 1 - index >= 0) {
                System.arraycopy(pairs, index + 1, pairs, index, count - 1 - index);
            }
            pairs[--count] = null;

//            throw new UnsupportedOperationException();
        }
    }

}